/*

* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Smart-Shop开源商城系统/ Java商城-首选电商平台系统 请务必保留此注释头信息
* |     开源地址: https://gitee.com/ningbo-qishan/gruul-mall
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     可正常分享和学习源码,未经授权 不可商用！
* |     商业版中台购买/开源版商业授权 联系技术客服
* |     官网:  https://www.73app.cn/
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Copyright (c) 2016-2999 宁波启山智软科技有限公司
* |     版权所有 ,侵权必究！
* ------------------------------------------------------------------------

*/
package com.medusa.gruul.common.core.config;

import com.medusa.gruul.common.core.constant.TimeConstants;
import com.medusa.gruul.common.core.helper.JwtHelper;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.concurrent.TimeUnit;

/**
 * @author 张治保
 * date 2021/12/1
 */
@Slf4j
@Getter
@Setter
@ConfigurationProperties(prefix = "auth.jwt")
public class JwtProperties implements InitializingBean {

    /**
     * ttl时间单位
     */
    private TimeUnit ttlTimeUnit = TimeUnit.SECONDS;
    /**
     * token
     */
    private Token token = new Token();

    /**
     * 刷新token
     */
    private Token refreshToken =  new Token().setSignKey("6nfkbrb8gus233").setTtl(TimeConstants.SIX_HOURS);

    @Override
    public void afterPropertiesSet() {
        log.info("==============jwt配置=============");
        log.info(this.toString());
        log.info("=================================");
        JwtHelper.init(this);
    }


    @Getter
    @Setter
    @Accessors(chain = true)
    public static class Token{
        /**
         * token签名秘钥
         */
        private String signKey = "6nfkbrb8gus";

        /**
         * token签名有效期
         */
        private long ttl = 2 * TimeConstants.ONE_HOUR;

        @Override
        public String toString() {
            return "Token{" +
                "signKey='" + signKey + '\'' +
                ", ttl=" + ttl +
                '}';
        }
    }


    @Override
    public String toString() {
        return "JwtProperties{" +
            "token=" + token +
            ", refreshToken=" + refreshToken +
            '}';
    }
}
